﻿//==========================================================
//Đã sửa bởi tranninh_86_yb@yahoo.com ngày 19/08/2013
//==========================================================

using System;
using System.Data;
using DevExpress.XtraReports.UI;
using prjKQXS_DLL;

namespace prjKQXS_UI.View
{
    public partial class frmTLChitiet : DevExpress.XtraEditors.XtraForm
    {
        int cap = 0;
        int DMCanBoID, HopDongID;
        decimal tiengoc = 0;
        DateTime NgayTLy;
        DateTime NgayRutTC;
        DateTime NgayTLKyTiep;
        DateTime NgayKTTL;


        #region form's event =================================================================
        public frmTLChitiet()
        {
            InitializeComponent();
        }

        public frmTLChitiet(int DMCanBoID, decimal tiengoc, int cap, DateTime ngaythanhly, DateTime ngayruttc, DateTime NgayTLKyTiep, DateTime NgayKTTL, int HopDongID=-1)
        {
            InitializeComponent();

            this.cap = cap;
            this.DMCanBoID = DMCanBoID;
            this.HopDongID = HopDongID;
            this.tiengoc = tiengoc;
            this.NgayTLy = ngaythanhly;
            this.NgayRutTC = ngayruttc;
            this.NgayTLKyTiep = NgayTLKyTiep;
            this.NgayKTTL = NgayKTTL;
        }

        private void frmTLChitiet_Load(object sender, EventArgs e)
        {
            //rilueKyHan
            DataTable dt = new DataTable();
            dt.Columns.Add("LoaiKyHan", Type.GetType("System.SByte"));
            dt.Columns.Add("TenKyHan", Type.GetType("System.String"));
            dt.Rows.Add();
            dt.Rows.Add(); 
            dt.Rows.Add();
            dt.Rows[0]["LoaiKyHan"] = 3; dt.Rows[0]["TenKyHan"] = "3 tháng";
            dt.Rows[1]["LoaiKyHan"] = 6; dt.Rows[1]["TenKyHan"] = "6 tháng";
            dt.Rows[2]["LoaiKyHan"] = 12; dt.Rows[2]["TenKyHan"] = "12 tháng";
            rilueKyHan.DataSource = dt;

            rgDoiTuong_SelectedIndexChanged(sender, e);
       }
        #endregion ===========================================================================


        #region control's event ==============================================================
        private void btnInTLChiTiet_Click(object sender, EventArgs e)
        {
            DataTable dt = ((DataTable)gcTLCT.DataSource).Copy();
            dt.TableName = "rptTLTC";
            prjKQXS_Report.rptMauTC02 rpt = new prjKQXS_Report.rptMauTC02(cap, DMCanBoID, HopDongID, dt);
            
            rpt.ShowRibbonPreviewDialog();
        }

        private void sbtnInGiayBienNhan_Click(object sender, EventArgs e)
        {
            DataTable dt = ((DataTable)gcTLCT.DataSource).Copy();
            dt.TableName = "rptTLTC";
            prjKQXS_Report.rptMauTC03 rpt = new prjKQXS_Report.rptMauTC03(rgDoiTuong.SelectedIndex, DMCanBoID, cap, dt, HopDongID);
            rpt.ShowRibbonPreviewDialog();
        }

        private void rgDoiTuong_SelectedIndexChanged(object sender, EventArgs e)
        {
            gcTLCT.DataSource = loadData();

            if (gvTLCT.RowCount == 0)
            {
                btnInTLChiTiet.Enabled = false;
                sbtnInGiayBienNhan.Enabled = false;
            }
            else
            {
                int id;
                if (cap == 1) id = DMCanBoID;
                else id = HopDongID;

                int LoaiKyHan = Convert.ToInt32(gvTLCT.GetRowCellValue(gvTLCT.RowCount - 1, gcolLoaiKyHan));
                decimal LaiXuat = Convert.ToDecimal(gvTLCT.GetRowCellValue(gvTLCT.RowCount - 1, gcolLaiXuat));
            }
        }
        #endregion ===========================================================================


        #region function =====================================================================
        private DataTable loadData()
        {
            //if (conn.State == ConnectionState.Closed)
            //{
            //    conn.Open();
            //}

            int id;
            if (cap == 1) id = DMCanBoID;
            else id = HopDongID;

            int mode = rgDoiTuong.SelectedIndex;

            //dt sau chứa các kỳ lãi đã gửi của đại lý có mã là maCBorDL, gồm các cột Tien, Ky, MaCB, LoaiKyHan, Tu_ngay, Den_Ngay, Lai_xuat.
            DataTable dt = clsCommon.loadDataSource_TLLX(cap, id);

            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    //Hàm này thêm các cột TienGocDauKy, Tien_lai, TienGocMoi vào dt và điền giá trị cho chúng
                    clsCommon.XyLyNguon(cap, id, NgayTLy, NgayRutTC, ref dt, i, mode);

                    //Loại bỏ kỳ không xét đối với mode Đại lý như sau:
                    //- Nếu chưa thanh lý => load bình thường
                    //- Nếu đã thanh lý:
                    //      + Nếu chưa rút thế chấp => chỉ lấy vào đến kỳ chứa ngày hẹn rút
                    //      + Nếu đã rút thế chấp:
                    //          . Nếu rút trước hoặc đúng hẹn => chỉ lấy đến kỳ chứa ngày rút thế chấp
                    //          . Nếu rút sau hẹn => (tương tự trường hợp chưa rút thế chấp)
                    if (rgDoiTuong.SelectedIndex == 0) //Nếu là mode Đại lý
                    {
                        DateTime NgayHenRut = NgayTLy.AddDays(30);
                        if (NgayTLy.Date != new DateTime().Date)    //Nếu đã thanh lý
                        {
                            if (NgayRutTC.Date == new DateTime().Date  //Nếu chưa rút thế chấp
                                || (NgayRutTC.Date != new DateTime().Date && NgayRutTC.Date > NgayHenRut)) //hoặc đã rút thế chấp nhưng sau hẹn
                            {
                                DateTime tungay = (DateTime)dt.Rows[i]["Tu_Ngay"];
                                DateTime denngay = (DateTime)dt.Rows[i]["Den_Ngay"];
                                if (NgayHenRut.Date >= tungay.Date && NgayHenRut.Date <= denngay.Date)  //Xác định kỳ chứa ngày hẹn rút
                                    if (i + 1 < dt.Rows.Count)
                                        for (int j = i + 1; j < dt.Rows.Count; j++) dt.Rows.RemoveAt(j);    //Loại bỏ các kỳ sau kỳ chứa ngày hẹn rút
                            }
                            else if (NgayRutTC.Date != new DateTime().Date && NgayRutTC.Date <= NgayHenRut.Date) //Nếu đã rút thế chấp và rút trước hoặc đúng hẹn
                            {
                                DateTime tungay = (DateTime)dt.Rows[i]["Tu_Ngay"];
                                DateTime denngay = (DateTime)dt.Rows[i]["Den_Ngay"];
                                if (NgayRutTC.Date >= tungay.Date && NgayRutTC.Date <= denngay.Date)  //Xác định kỳ chứa ngày rút thế chấp
                                    if (i + 1 < dt.Rows.Count)
                                        for (int j = i + 1; j < dt.Rows.Count; j++) dt.Rows.RemoveAt(j);    //Loại bỏ các kỳ sau kỳ chứa ngày rút thế chấp
                            }
                        }
                    }
                }
            }


            return dt;
        }
        #endregion ===========================================================================
    }
}